package tag

import (
	"zstackgo/pkg/header/message"
	htag "zstackgo/pkg/header/tag"
)

type TagManager interface {
	CreateNonInherentSystemTag(resourceUuid, tag, resourceType string) *htag.SystemTagInventory
	CreateInherentSystemTag(resourceUuid, tag, resourceType string) *htag.SystemTagInventory
	CreateInherentSystemTags(sysTags []string, resourceUuid, resourceType string)
	CreateNonInherentSystemTags(sysTags []string, resourceUuid, resourceType string)
	CreateTagsFromAPICreateMessage(msg *message.APICreateMessage, resourceUuid, resourceType string)
	CreateTagsFromAPICreateMessageForceMatch(msg *message.APICreateMessage, resourceUuid, resourceType string, forceMatch bool)
	CreateSysTag(resourceUuid, tag, resourceType string) *htag.TagInventory
	CreateUserTag(resourceUuid, tag, resourceType string) *htag.TagInventory
	CopySystemTagInherent(srcResourceUuid, srcResourceType, dstResourceUuid, dstRecourceType string, inherent bool)
	CopySystemTag(srcResourceUuid, srcResourceType, dstResourceUuid, dstRecourceType string)
	UpdateSystemTag(tagUuid, newTag string) *htag.SystemTagInventory
	FindSystemTags(resourceUuid string) []string
	FindUserTags(resourceUuid string) []string
	HasSystemTag(resourceUuid, tag string) bool
	DeleteSystemTag(uuid string)
	DeleteSystemTagInherit(tag, resourceUuid, resourceType string, inherit bool)
	DeleteSystemTagUserLike(tag, resourceUuid, resourceType string, inherit bool)
	GetManagedEntityNames() map[string]bool
	ValidateSystemTag(resourceUuid, resourceType, tag string)
	IsResourceConfigSystemTag(tag string)
	InstallCreateMeesageValidator(resourceType string, validator htag.SystemTagCreateMessageValidator)
	InstallAfterResourceDeletionOperator(resourceType string, operator htag.SystemTagResourceDeletionOperator)
	CreateTags(systemTags, userTags []string, resourceUuid, resourceType string)
	FilterSystemTags(systemTags []string, resourceType string) []string
	IsCloneable(tag, resourceType string) bool
}
